OpenMP

OpenMP
開発元 OpenMP ARB
最新版
5.2 / 2021年11月 (2021-11)[1]
プラットフォーム クロスプラットフォーム
対応言語 C/C++, Fortran
種別 並列プログラミングAPI、言語拡張
公式サイト www.openmp.org

OpenMP(オープンエムピー)は、並列計算機環境において共有メモリ・マルチスレッド型の並列アプリケーションソフトウェア開発をサポートするために標準化されたAPIである[2]。「OpenMP」は「open multiprocessing」の略である[2]

同様に並列コンピューティングに利用されるMPIでは、メッセージの交換をプログラム中に明示的に記述しなければならないが、OpenMPではディレクティブ(指令)を挿入することによって並列化を行う。OpenMPが使用できない環境では、このディレクティブは無視されるため、並列環境と非並列環境でほぼ同一のソースコードを使用できるという利点がある。また、プラットフォーム固有のスレッドAPIを使わず、コンパイラによって暗黙的に生成されたスレッド[注釈 1]を利用してタスクを振り分けることになるため、並列プログラムを簡潔に記述できるだけでなく、複数の環境に移植しやすくなる。

MPIとの比較では、OpenMPは異なるスレッドが同一のデータを同じアドレスで参照できるのに対して、MPIでは明示的にメッセージ交換を行わなければならない。そのため、OpenMPは、SMP環境においては大きなデータの移動を行なわずにすむので高い効率が期待できる。ただし並列化の効率はコンパイラに依存するので、チューニングによる性能改善がMPIほど高くならないという問題がある。また、OpenMPはMPIに比べてメモリアクセスのローカリティが低くなる傾向があるので、頻繁なメモリアクセスがあるプログラムでは、MPIの方が高速な場合が多い[要出典]

OpenMPは、並列プログラミングにおいて最も広く利用されているAPIであるが、共有メモリに対してUniform Memory Access英語版に近いアクセスができるハードウェアシステムアーキテクチャでは、スケーラビリティに限界がある[2]。そのため、現在のほとんどのスーパーコンピューターでは、OpenMP単独ではなく、分散メモリ環境で高いスケーラビリティを発揮するMPIと組み合わせた、ハイブリッドMPI+OpenMPが利用されている[2][5]

2013年にリリースされたOpenMP 4.0では、多数の先進的な機能が追加された[6]SIMD命令を使った自動ベクトル化機能(omp simd)や、GPUなどのアクセラレータに並列処理を委譲する分散メモリ型のオフロード機能などがサポートされている[7][8]

2023年現在、FORTRANC/C++について標準化が行われている。

  1. ^ OpenMP Application Programming Interface Version 5.2
  2. ^ a b c d Sterling, Thomas; Anderson, Matthew; Brodowicz, Maciej. High performance computing : modern systems and practices. Cambridge, MA. ISBN 9780124202153. OCLC 1013816564. https://www.worldcat.org/oclc/1013816564 
  3. ^ §Example: /openmp (Enable OpenMP Support) | Microsoft Learn
  4. ^ 第 4 章 入れ子並列処理 (Sun Studio 12: OpenMP API ユーザーズガイド)
  5. ^ Rabenseifner, R.; Hager, G.; Jost, G. (2009-2). “Hybrid MPI/OpenMP Parallel Programming on Clusters of Multi-Core SMP Nodes”. 2009 17th Euromicro International Conference on Parallel, Distributed and Network-based Processing: 427–436. doi:10.1109/PDP.2009.43. https://ieeexplore.ieee.org/document/4912964/. 
  6. ^ OpenMP 4.0 Specifications Released - OpenMP
  7. ^ インテル® コンパイラーを使用した OpenMP* による並列プログラミング - セッション 3: OpenMP* の SIMD 機能
  8. ^ インテル® コンパイラーを使用した OpenMP* による GPU オフロードの基本


引用エラー: 「注釈」という名前のグループの <ref> タグがありますが、対応する <references group="注釈"/> タグが見つかりません


© MMXXIII Rich X Search. We shall prevail. All rights reserved. Rich X Search